//callback
// function fun(){
//   var res;
//   setTimeout(()=>{
//     res='你好'
//   },100)
//   console.log('res',res);
// }
// fun()

//Promise 

function p1(){
  return new Promise((resolve,reject)=>{
    // resolve('成功1')
    reject('失败1')
  })
}
function p2(){
  return new Promise((resolve,reject)=>{
    // resolve('成功2')
    reject('失败2')
  })
}
function p3(){
  return new Promise((resolve,reject)=>{
    // resolve('成功3')
    reject('失败3')
  })
}

// p1().then((res)=>{
//    console.log(res);
// }).catch((err)=>{
//    console.log(err);
// })
// //all是数组里的实例都是成功才会返回成功，有失败的就返回第一个失败的
// Promise.all([p1(),p2(),p3()]).then((res)=>{
//   console.log('all 成功',res);
// }).catch((err)=>{
//   console.log('all 失败',err);//返回的是失败2
// })

// //allSettled返回结果总是成功
// Promise.allSettled([p1(),p2(),p3()]).then((res)=>{
//   console.log('allSettled 成功',res);
// }).catch((err)=>{
//   console.log('allSettled 失败',err);
// })

// //Promise.any() 接收一个Promise可迭代对象，只要其中的一个 promise 成功，
// // 就返回那个已经成功的 promise 。如果可迭代对象中没有一个 promise 成功（即所有的 promises 都失败/拒绝），就返回一个失败的 promise
// Promise.any([p1(),p2(),p3()]).then((res)=>{
//   console.log('any 成功',res);
// }).catch((err)=>{
//   console.log('any 失败',err);
// })
// https://blog.csdn.net/halations/article/details/86590013


//async await
//async 可以单独使用 并且返回的是promise对象
//await (后面跟的是个异步/promise) 必须配合async使用，不然报错
// function func1(){
//   return new Promise((resolve,reject)=>{
//     setTimeout(()=>{
//       resolve([1,2,3])
//     },100)
//   })
// }

// //async和await必须在同一个函数里，不能跨函数
// async function getData(){
//   (()=>{
//    console.log('立即执行函数')
//   //  const res = await func1()//错误写法
//   //  console.log(res,72);
//   })();
//   const res = await func1()
//   console.log(res,72);
// }

// getData()
//https://blog.csdn.net/DGMM_/article/details/120616758
//async await 和 promise的区别？？？打开看写个例子比一下


// 假设一个业务，分多个步骤完成，每个步骤都是异步的，而且依赖于上一个步骤的结果
// 
function num(n){
  return new Promise(resolve => {
    setTimeout(()=>resolve(n+200),n)
  })
}

function text1(e){
  console.log(`text1 with${e}`);
  return num(e)
}

function text2(e){
  console.log(`text2 with${e}`);
  return num(e)
}

function text3(e){
  console.log(`text3 with${e}`);
  return num(e)
}

// text1(300).then((res1)=>{
//  console.log(res1);
//  return text2(res1)
// }).then((res2)=>{
//   console.log(res2);
//   return text3(res2)
// }).then((res3)=>{
//   console.log(res3);
//  })


 async function yy(){
    var res1 = await text1(300)
    var res2 = await text2(res1)
    var res3 = await text3(res2)
    console.log(res3);
 }

 yy()